МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
кафедра захисту інформації
ГРАФІЧНО–РОЗРАХУНКОВА РОБОТА
з курсу
"МІКРОПРОЦЕСОРНІ ПРИСТРОЇ"
варіант № 27
НЗК – 0609083
Завдання:
Написати та відлагодити програму для схеми, яка б здійснювала дискретизацію вхідного аналогового сигналу з діапазоном Uвх = 0-5 B з частотою FS, Гц аналого-цифровим перетворювачем MAX1241 (опорна напруга UREF = 5 В) та відображала значення напруги на рідкокристалічному дисплеї LM020L (1 рядок з 16 символами) з контролером HD44780, та передавала її зна-чення через послідовний порт в ПК зі швидкістю передачі R Бод. Тактова частота Ft МК AT90S2313 становить 7.3728 МГц. Якщо напруга виходить за межі 2.5 B ± 0.xx В (хх – останні дві цифри номера залікової книжки, якщо хх = 00 прийняти хх = 99) на дисплей виводиться повідомлення Alarm.
Перевірити правильність роботи програми шляхом симуляції в середовищі Proteus 7.
Варіант
Частота дискретизації
Fs, Гц
Швидкість передачі по УАПП
R, Бод
27
1.8
9600
Розрахункова частина
Оскільки номер залікової книжки – 0609083, то межі напруги становлять:
нижній поріг спрацювання: 1,67 В
верхній поріг спрацювання: 3,33 В
Якщо напруга не належить цьому відрізку необхідно вивести повідомлення Alarm.
Знайдемо значення констант спрацювання за формулою: , де - напруги порогів спрацювання, - опорна напруга на АЦП (5 Вольт), - шукана константа.
Знайдемо подільник та поріг спрацювання таймера Т1, для того, щоб проводити опитування напруги з частотою дискретизації Fs = 0,4 Гц.
Часовий інтервал генерації таймером переривання обчислюється за формулою:
Враховуючи, що при максимальному значені N = 65535, значення подільника становить DIV = 281, потрібно взяти подільник на порядок вище (DIV = 1024), тоді значення N становить:
Отже, значення порогу порівняння для таймера Т1 становить TimerVal = 4000
Знайдемо подільник частоти для UART, щоб забезпечити швидкість передачі R = 9600 бод.
Швидкість визначається наступним виразом:
де – швидкість передачі (в бодах); – тактова частота МК, Гц; UBRR – вміст регістру контролера швидкості передачі (0…255)
Звідси
Лістинг програми
.nolist
.include <2313def.inc>
.list
.def lcd = r16 ; регістр, який містить команди або дані для РКД
.def count = r17
.def temp = r18
.def Delay1 = r19 ; регістри часової затримки
.def Delay2 = r20
.def Delay3 = r21
.def cmp1 = r22
.def cmp2 = r23
.def ACP_res1 = r24 ; регістри містять результат перетворення АЦП
.def ACP_res2 = r25
.def ACP_res3 = r26
.def ACP_res4 = r27
.def B1 = r19 ; регістри вокористовуються при множенні
.def B2 = r20
.def B3 = r21
.def B4 = r22
.def num = r28
.def end_num = r29
.equ N_2mks = 3
.equ N_50mks = 71
.equ N_2ms = 2946
.equ N_20ms = 29489
.equ CMP_low = 1368 ; нижній рівень спрацювання 2.5 - 0.83 = 1.67
.equ CMP_high = 2727 ; верхній рівень спрацювання 2.5 + 0.83 = 3.33
; при подільнику 1024 і частоті 7,3728 частота спрацювання таймера 1.8 Гц
.equ TimerVal = 4000
.equ RW = PD4 ; керування рідкокристалічним дисплеєм
.equ E = PD5
.equ RS = PD6
.equ nCS = PB0 ; виводи для керування АЦП
.equ DOUT = PB1
.equ SCLK = PB2
.cseg
.org 0
rjmp RESET ; перехід після скидання
.org 0x04
rjmp TIMER_EXT ; Timer1 overlow
.org 0x0B
RESET:
; ініціалізація стеку
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, (1<<PD1)+(1<<PD4)+(1<<PD5)+(1<<PD6)
out DDRD, temp ; налаштувати виводи порта D
ldi temp, ~((1<<PB1)+(1<<PB3))
out DDRB, temp ; налаштувати виводи порта B
; налаштування таймера
ldi temp, high(TimerVal)
out OCR1AH, temp ; занести старший байт
ldi temp, low(TimerVal)
out OCR1AL, temp ; занести молодший байт
ldi temp, (1<<OCIE1A) ; дозволити переривання при співпадінні
out TIMSK, temp
ldi temp, (1<<CTC1) + (1<<CS12) + (1<<CS10) ; div = 1024
out TCCR1B, temp
ldi temp, (1<<SE) ; дозволити енергозберігаючий режим
out MCUCR, temp
; налаштування UART
ldi temp, 47
...